/**
 * 
 */

package com.gustozzi.distribucion.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.gustozzi.distribucion.action.util.Constantes;
import com.gustozzi.distribucion.negocio.DistribucionBO;
import com.gustozzi.distribucion.negocio.impl.DistribucionBOImpl;
import com.gustozzi.domain.CentroDistribucion;
import com.gustozzi.domain.Despacho;
import com.gustozzi.domain.GuiaRemision;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author FABRIZIO
 * 
 */
public class GuiaRemisionAction extends ActionSupport implements ServletRequestAware
{
    private static final long serialVersionUID = 1L;
    DistribucionBO distribucionBO = new DistribucionBOImpl();
    private String botonSeleccionado;
    private GuiaRemision guiaRemision;
    private List<GuiaRemision> listaGuiasRemision;
    private List<Despacho> listaDespachos;
    private String codigoSeleccionado;
    private HttpServletRequest request;
    private boolean indicadorGuiaRemision;
    private boolean indicadorListaVacia;

    public String execute()
    {
        String destino = Constantes.CADENA_VACIA;
        if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_FILTRAR))
        {
            destino = obtenerListaGuiasRemision();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_NUEVO))
        {
            destino = nuevaGuiaRemision();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_VERDESPACHO))
        {
            destino = verDespacho();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_ELIMINAR))
        {
            destino = eliminarGuiaRemision();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_GUARDAR))
        {
            destino = guardarGuiaRemision();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_CANCELAR))
        {
            destino = cancelarGuiaRemision();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_EDITAR))
        {
            destino = editarGuiaRemision();
        }
        else
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String obtenerListaGuiasRemision()
    {
        String destino = Constantes.CADENA_VACIA;
        List<GuiaRemision> lista = null;
        try
        {
            String codigo = guiaRemision.getCodigo();
            String fechaDesde = guiaRemision.getFechaDesde();
            String fechaHasta = guiaRemision.getFechaHasta();
            lista = new ArrayList<GuiaRemision>();
            
            //TODO Cambiar para cuando se consulte a la BD
            if(codigo.equalsIgnoreCase("1") || codigo.equalsIgnoreCase("")) {
                lista = distribucionBO.obtenerListaGuiasRemision(codigo, fechaDesde, fechaHasta);                
            } 
            
            if (lista.size() == 0)
            {
                indicadorListaVacia = true;
            }
            this.setListaGuiasRemision(lista);
            request.getSession().setAttribute(Constantes.LISTAGUIASSESSION, lista);
            destino = Constantes.CONSULTARGUIAREMISION;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String nuevaGuiaRemision()
    {
        guiaRemision.setCodigo("TEMP");
        String destino = Constantes.NUEVAGUIAREMISION;
        return destino;
    }
    
    public String editarGuiaRemision()
    {
        guiaRemision.setCodigo("1");
        guiaRemision.setFechaEntrega("17/03/2012");
        guiaRemision.setPuntoPartida("Punto de partida");
        guiaRemision.setPuntoLlegada("Punto de llegada");
        
        List<Despacho> lista = new ArrayList<Despacho>();
        Despacho despacho = new Despacho();
        despacho.setCodigo("1");
        despacho.setFechaEntrega("17/03/2012");
        CentroDistribucion centro = new CentroDistribucion();
        centro.setCodigo("1");
        centro.setDescripcion("Centro 1");
        despacho.setCentroDistribucion(centro);
        lista.add(despacho);
        despacho = new Despacho();
        despacho.setCodigo("2");
        despacho.setFechaEntrega("17/03/2012");
        centro = new CentroDistribucion();
        centro.setCodigo("1");
        centro.setDescripcion("Centro 1");
        despacho.setCentroDistribucion(centro);
        lista.add(despacho);
        setListaDespachos(lista);
        
        request.getSession().setAttribute("listaDespachosSession", lista);
        String destino = Constantes.NUEVAGUIAREMISION;
        return destino;
    }

    public String verDespacho()
    {
        String destino = Constantes.CADENA_VACIA;
        try
        {
            indicadorGuiaRemision = true;
            request.getSession().setAttribute("ORIGENDESPACHO", "GUIAREMISION");
            destino = Constantes.VERDESPACHO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String guardarGuiaRemision()
    {
        String destino = Constantes.CADENA_VACIA;
        destino = Constantes.CONSULTARGUIAREMISION;
        return destino;
    }
    
    @SuppressWarnings("unchecked")
    public String eliminarGuiaRemision()
    {
        String destino = Constantes.CADENA_VACIA;
        String codigoGuia = codigoSeleccionado;
        try
        {
            List<GuiaRemision> lista = (ArrayList<GuiaRemision>)request.getSession().getAttribute(Constantes.LISTAGUIASSESSION);
            for(int i=0; i< lista.size(); i++) {
                GuiaRemision guiaRemision = (GuiaRemision) lista.get(i);
                if(guiaRemision.getCodigo().equalsIgnoreCase(codigoGuia)) {
                    lista.remove(i);
                    break;
                }
                request.getSession().setAttribute(Constantes.LISTAGUIASSESSION, lista);
                setListaGuiasRemision(lista);
            }
            destino = Constantes.CONSULTARGUIAREMISION;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }
    
    @SuppressWarnings("unchecked")
    public String cancelarGuiaRemision()
    {
        String destino = Constantes.CADENA_VACIA;
        List<Despacho> listaDespachos = null;
        String codigoDespacho = codigoSeleccionado;
        guiaRemision.setCodigo("1");
        try
        {
            listaDespachos = (ArrayList<Despacho>) request.getSession().getAttribute("listaDespachosSession");
            for (int i = 0; i < listaDespachos.size(); i++)
            {
                Despacho despacho = listaDespachos.get(i);
                if (despacho.getCodigo().equalsIgnoreCase(codigoDespacho))
                {
                    listaDespachos.remove(i);
                    break;
                }
            }
            setListaDespachos(listaDespachos);
            request.getSession().setAttribute("listaDespachosSession", listaDespachos);
            destino = Constantes.NUEVAGUIAREMISION;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    @Override
    public void setServletRequest(HttpServletRequest request)
    {
        this.request = request;
    }

    /**
     * @return the botonSeleccionado
     */
    public String getBotonSeleccionado()
    {
        return botonSeleccionado;
    }

    /**
     * @return the guiaRemision
     */
    public GuiaRemision getGuiaRemision()
    {
        return guiaRemision;
    }

    /**
     * @return the listaGuiasRemision
     */
    public List<GuiaRemision> getListaGuiasRemision()
    {
        return listaGuiasRemision;
    }

    /**
     * @return the listaDespachos
     */
    public List<Despacho> getListaDespachos()
    {
        return listaDespachos;
    }

    /**
     * @return the codigoSeleccionado
     */
    public String getCodigoSeleccionado()
    {
        return codigoSeleccionado;
    }

    /**
     * @param botonSeleccionado
     *            the botonSeleccionado to set
     */
    public void setBotonSeleccionado(String botonSeleccionado)
    {
        this.botonSeleccionado = botonSeleccionado;
    }

    /**
     * @param guiaRemision
     *            the guiaRemision to set
     */
    public void setGuiaRemision(GuiaRemision guiaRemision)
    {
        this.guiaRemision = guiaRemision;
    }

    /**
     * @param listaGuiasRemision
     *            the listaGuiasRemision to set
     */
    public void setListaGuiasRemision(List<GuiaRemision> listaGuiasRemision)
    {
        this.listaGuiasRemision = listaGuiasRemision;
    }

    /**
     * @param listaDespachos
     *            the listaDespachos to set
     */
    public void setListaDespachos(List<Despacho> listaDespachos)
    {
        this.listaDespachos = listaDespachos;
    }

    /**
     * @param codigoSeleccionado
     *            the codigoSeleccionado to set
     */
    public void setCodigoSeleccionado(String codigoSeleccionado)
    {
        this.codigoSeleccionado = codigoSeleccionado;
    }

    /**
     * @return the indicadorGuiaRemision
     */
    public boolean isIndicadorGuiaRemision()
    {
        return indicadorGuiaRemision;
    }

    /**
     * @param indicadorGuiaRemision
     *            the indicadorGuiaRemision to set
     */
    public void setIndicadorGuiaRemision(boolean indicadorGuiaRemision)
    {
        this.indicadorGuiaRemision = indicadorGuiaRemision;
    }

    /**
     * @return the indicadorListaVacia
     */
    public boolean isIndicadorListaVacia()
    {
        return indicadorListaVacia;
    }

    /**
     * @param indicadorListaVacia the indicadorListaVacia to set
     */
    public void setIndicadorListaVacia(boolean indicadorListaVacia)
    {
        this.indicadorListaVacia = indicadorListaVacia;
    }
}